home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / thesource-7.lha / Source / Articles / Stereoscopic / SegaGlasses.lha / SegaGlasses / split.c < prev    next >
C/C++ Source or Header  |  1992-07-29  |  5KB  |  122 lines

  1. #include <stdio.h>
  2. #include <alloc.h>
  3.  
  4. typedef struct { unsigned char id_chars;
  5.                  unsigned char map_type;
  6.                  unsigned char image_type;
  7.                  unsigned int  map_origin;
  8.                  unsigned int  map_length;
  9.                  unsigned char map_entry_size;
  10.                  unsigned int  x_origin;
  11.                  unsigned int  y_origin;
  12.                  unsigned int  width;
  13.                  unsigned int  height;
  14.                  unsigned char bpp;
  15.                  unsigned char desc;
  16.                } targa_header;
  17.  
  18. typedef struct { unsigned int width,
  19.                               height,
  20.                               colors;
  21.                } img_header;
  22.  
  23. typedef struct { unsigned char r,
  24.                                g,
  25.                                b;
  26.                } palette[256];
  27.  
  28.  
  29. void main(int argc, char *argv[])
  30. {
  31.     FILE *i, *l, *r;
  32.     char *left, *right;
  33.     targa_header th;
  34.     img_header ih;
  35.     palette pal;
  36.     unsigned char temp;
  37.     long size;
  38.     int loop;
  39.  
  40.     if (argc < 3)
  41.     {
  42.         printf("Usage %s infile.img outleft.tga outright.tga\n", argv[0]);
  43.         exit(-1);
  44.     }
  45.  
  46.     if ((i = fopen(argv[1], "rb")) == NULL)
  47.     {
  48.         printf("Could not open input file %s.\n", argv[1]);
  49.         exit(-1);
  50.     }
  51.  
  52.     if ((l = fopen(argv[2], "wb")) == NULL)
  53.     {
  54.         printf("Could not open left output file %s.\n", argv[2]);
  55.         exit(-1);
  56.     }
  57.  
  58.     if ((r = fopen(argv[3], "wb")) == NULL)
  59.     {
  60.         printf("Could not open right output file %s.\n", argv[3]);
  61.         exit(-1);
  62.     }
  63.  
  64.     fread(&ih, sizeof(ih), 1, i);         /* Read in the 6 byte .img header */
  65.     fread(&pal, sizeof(pal), 1, i);       /* Read in the palette */
  66.  
  67.     size = ih.width * ih.height;          /* Calculate the size of he image */
  68.                                           /* for the malloc() */
  69.  
  70.     left = malloc(size);                  /* Allocate memory for the images */
  71.     right = malloc(size);                 /* Do both at once, as no image */
  72.                                           /* should be larger than 256K total */
  73.  
  74.     fread(left, size, 1, i);              /* Read in the left image */
  75.     fread(right, size, 1, i);             /* Read in the right image */
  76.  
  77.     for (loop = 0; loop < 255; loop++) /* .IMG files have palette entries */
  78.     {                                  /* in the range 0..63, so we have to */
  79.         temp = pal[loop].r * 4;        /* expand them to 0..255 */
  80.         pal[loop].r = pal[loop].b * 4;
  81.         pal[loop].g *= 4;              /* Targa palettes are also ordered */
  82.         pal[loop].b = temp;            /* BGR, not RGB, so we have to swap */
  83.     }                                  /* the R and B components */
  84.  
  85.     th.id_chars = 0;                   /* No image identification field */
  86.     th.map_type = 1;                   /* Has to be 1 for image_type 1 */
  87.     th.image_type = 1;                 /* Color-mapped uncompressed image */
  88.     th.map_origin = 0;                 /* Color map starts at offset zero */
  89.     th.map_length = 256;               /* and is 256 entries long */
  90.     th.map_entry_size = 24;            /* Each palette entry is 24 bits long */
  91.     th.x_origin = 0;                   /* The image origin is in the left, */
  92.     th.y_origin = 0;                   /* top of the screen */
  93.     th.width = 320;                    /* Obvious */
  94.     th.height = 200;                   /* Obvious */
  95.     th.bpp = 8;                        /* There are 8 bits per pixel */
  96.     th.desc = 32;                      /* Bits 0..3: Attribute bits per pixel */
  97.                                        /*         4: Reserved - set to 0 */
  98.                                        /*         5: Screen origin */
  99.                                        /*            0: Lower left corner */
  100.                                        /*            1: Upper right corner */
  101.                                        /*      6..7: Interleave */
  102.                                        /*            00: Non-interleaved */
  103.                                        /*            01: 2-way interleave */
  104.                                        /*            10: 4-way interleave */
  105.                                        /*            11: Reserved */
  106.  
  107.     close(i);                          /* Close the input file */
  108.  
  109.     fwrite(&th, sizeof(th), 1, l);     /* Write out the Targa header */
  110.     fwrite(&pal, sizeof(pal), 1, l);   /* Write the palette */
  111.     fwrite(left, size, 1, l);          /* Write the image */
  112.     close(l);                          /* Close the file */
  113.  
  114.     fwrite(&th, sizeof(th), 1, r);     /* Write out the Targa header */
  115.     fwrite(&pal, sizeof(pal), 1, r);   /* Write the palette */
  116.     fwrite(right, size, 1, r);         /* Write the image */
  117.     close(r);                          /* Close the file */
  118.  
  119.     free(left);                        /* Free the left image memory */
  120.     free(right);                       /* Free the left image memory */
  121. }
  122.